#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include "fusee.h"
#include "terrain.h"
#include "Bonus.h"

#ifndef _JEU
#define _JEU

/**
@brief la structure Jeu qui permet d'acceder aux differents fichier via jeu
**/

typedef struct{
	char* nomJoueur1;
	char* nomJoueur2;

    Fusee fuseeHaut;
	Fusee fuseeBas;
    Equipement equipementHaut;             //equipement de la fusee du haut
	Equipement equipementBas;              //equipement de la fusee du bas
    Terrain terrain;
    Bonus bonusVie;
    int decisionIA;

}Jeu;

/**
@brief les fonctions d'initialisations et de liberation, initJeu, parametreJeu, paratreNomJoueurs: prennent un pointeurs sur jeu et permet l'initialisation.
**/

void initJeu (Jeu *j);
void parametreJeu (Jeu *j);
void parametreNomJoueurs (Jeu *j);

/**
@brief la procedure libereJeu prends un pointeur et permet de liberer.
**/
void libereJeu (Jeu *j);

/**
@brief les accesseurs permettant d'accéder aux données
**/
char* getnomJoueur1(const Jeu *j);
char* getnomJoueur2(const Jeu *j);
Fusee* getFuseeHaut(Jeu *j);
Fusee* getFuseeBas(Jeu *j);
Equipement* getEquipementHaut(Jeu *j);
Equipement* getEquipementBas(Jeu *j);
Terrain* getTerrain(Jeu *j);
Bonus* getBonusVie (Jeu *j);
int getDecisionIA(Jeu *j);


/**
@brief la mutateurs permettant de modifier les données du jeu
**/
//mutateurs
void setnomJoueur1(Jeu *j,const char *nomJoueur1, int taille);
void setnomJoueur2(Jeu *j,const char *nomJoueur2, int taille);
void setDecisionIA(Jeu *j, int decision);
/**
@brief la procedure actionsClavier qui prend un pointeur sur jeu et une chaine de caractere permet de gerer les touches du clavier utilisés pour le jeu
**/
void actionsClavier (Jeu *j, const char touche);
/**
@brief la procedure tirFusee qui prend un pointeur sur jeu et un pointeur de type fusee permet d'ajouter les equipement utilisés pour les tire du jeu
**/
int finJeu (Jeu *j);
void tirFusee (Jeu *j, Fusee *f);
/**
@brief la procedure gestionDeplacementEquipements qui prend un pointeur sur jeu permet de gerer les equippements du jeu
**/
void gestionDeplacementEquipements(Jeu *j);
/**
@brief la procedure gestionCollisionEquipements et gestionCollisionsTir sont deux procedure qui nous permet de gerer la collision.
**/
void gestionCollisionEquipements(Jeu *j);
void ajouterPointsVie(Jeu *j, Equipement *eq);

//Intelligence Artificielle
void changementDecisionIA (Jeu *j);
void tirIA (Jeu *j);



/**
@brief les procedures Test de non-regression du Jeu.
**/
//Test de non-régression
void testRegressionJeu();
void affichageStructuresJeu(Jeu *j);
void EvolutionJeu (Jeu *j);



#endif

